sql/schemachanger: implement CREATE OR REPLACE FUNCTION with Drop/Add #163286
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note: This is a draft PR to prototype a suggestion from the review of #163210
Previously, CREATE OR REPLACE FUNCTION was not supported in the
declarative schema changer and fell back to the legacy schema changer
via NotImplementedError.
This commit implements CREATE OR REPLACE using the drop+add pattern
already established by TableStorageParam, RowLevelTTL, and zone configs.
Each mutable sub-element (FunctionBody, FunctionVolatility,
FunctionLeakProof, FunctionNullInputBehavior, FunctionSecurity,
FunctionParams) is dropped and re-added with the new values, while
Function, SchemaChild, FunctionName, Owner, and UserPrivileges remain
untouched.
Key changes:
kind match, return type match (including UDT equivalence), parameter
name/type constraints, trigger function checks. Options not specified
are reset to defaults, matching legacy resetFuncOption behavior.
SetFunctionParams mutation, rather than only having params in
scpb.Function.
uniqueness when content is unchanged during replace.
before new ones are added.
back-references from relations and functions no longer depended on.
Epic: CRDB-42942
Release note: None